package com.sywb.chuangyebao.contract;

import android.content.Intent;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.sywb.chuangyebao.Constants;
import com.sywb.chuangyebao.bean.UserInfo;
import com.sywb.chuangyebao.utils.HttpUtils;
import com.sywb.chuangyebao.view.BindMobileActivity;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import com.umeng.analytics.MobclickAgent;

import org.bining.footstone.log.Logger;
import org.bining.footstone.utils.SharedUtils;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.sina.weibo.SinaWeibo;

public interface LoginContract {

    interface View extends BaseTokenContract.View {
    }

    class Presenter extends BaseTokenContract.Presenter<View> {

        /**
         * 注意：SsoHandler 仅当 SDK 支持 SSO 时有效
         */
//        private SsoHandler mSsoHandler;
        @Override
        public void onStart() {
            super.onStart();
        }

        public void login(String mobile, String password) {
            loginType = 0;
            SharedUtils.put(Constants.USERACCOUNT, mobile);
            SharedUtils.put(Constants.USERPASSWORD, password);
            HttpUtils.login(getTokenCallback());
        }

        public void loginToQQ(String data) {
            HttpUtils.loginToQQ(data, getTokenCallback());
        }

        public void loginToWeixin(String code) {
            HttpUtils.loginToWeixin(code, getTokenCallback());
        }

        public void loginToSina(String data) {
            HttpUtils.loginToSina(data, getTokenCallback());
        }

        /**
         * qq登录
         */
        public void clickBtnQQLogin() {
            loginType = 1;
            Tencent mTencent = Tencent.createInstance(Constants.QQ_APPID, mActivity);
            mTencent.login(mActivity, "all", new BaseUiListener());
        }

        /**
         * 微信登录
         */
        public void clickBtnWeinxinLogin() {
            loginType = 2;
            // 通过WXAPIFactory工厂，获取IWXAPI的实例
            IWXAPI api = WXAPIFactory.createWXAPI(mContext, Constants.WEIXIN_APPID, false);
            // 将该app注册到微信
            api.registerApp(Constants.WEIXIN_APPID);

            //发起登录请求
            SendAuth.Req req = new SendAuth.Req();
            req.scope = "snsapi_userinfo";
            req.state = "wechat_sdk_CYB";
            api.sendReq(req);
        }

        @Override
        protected void afterLogin(UserInfo userInfo) {
            super.afterLogin(userInfo);
            Map loginMap = new HashMap();
            loginMap.put("userid", userInfo.uid);
            MobclickAgent.onEvent(mContext, "__login", loginMap);
            if (userInfo.mobile_verify == 0) {
                goBind();
            }
        }

        private void goBind() {
            mView.advance(BindMobileActivity.class);
        }

        /**
         * 新浪微博登录
         */
        public void clickBtnSinaLogin() {
            /**
             * REDIRECT_URL 注：关于授权回调页对移动客户端应用来说对用户是不可见的，所以定义为何种形式都将不影响，
             * 但是没有定义将无法使用 SDK 认证登录。
             * 建议使用默认回调页：https://api.weibo.com/oauth2/default.html
             */

            /**
             * Scope 是 OAuth2.0 授权机制中 authorize 接口的一个参数。通过 Scope，平台将开放更多的微博
             * 核心功能给开发者，同时也加强用户隐私保护，提升了用户体验，用户在新 OAuth2.0 授权页中有权利
             * 选择赋予应用的功能。
             * 我们通过新浪微博开放平台-->管理中心-->我的应用-->接口管理处，能看到我们目前已有哪些接口的
             * 使用权限，高级权限需要进行申请。
             * 目前 Scope 支持传入多个 Scope 权限，用逗号分隔。
             * 有关哪些 OpenAPI 需要权限申请，请查看：http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI
             * 关于 Scope 概念及注意事项，请查看：http://open.weibo.com/wiki/Scope
             */
//            WbSdk.install(mActivity, new AuthInfo(mActivity, Constants.SINA_APPKEY, Constants.SINA_REDIRECT_URL, Constants.SINA_SCOPE));
//            mSsoHandler = new SsoHandler(mActivity);
//            mSsoHandler.authorize(new SelfWbAuthListener());


            Platform platform = ShareSDK.getPlatform(SinaWeibo.NAME);
//            if (platform.isAuthValid()) {
//                platform.removeAccount(true);
//            }

            platform.setPlatformActionListener(new PlatformActionListener() {
                @Override
                public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
                    Logger.e("新浪登录：onComplete:" + platform.getDb().exportData());
                    LinkedHashMap<String, Object> paramsMap = JSON.parseObject(platform.getDb().exportData(), new TypeReference<LinkedHashMap<String, Object>>() {
                    });
                    HttpUtils.loginToSina(paramsMap.get("userID"), paramsMap.get("token"), paramsMap.get("expiresIn"), paramsMap.get("refresh_token"), paramsMap.get("expiresTime"), getTokenCallback());
//                    loginToSina(platform.getDb().exportData());
                }

                @Override
                public void onError(Platform platform, int i, Throwable throwable) {
                    Logger.e("新浪登录：onError:" + throwable.getStackTrace().toString());
                    Logger.e("新浪登录：onError:" + throwable.getMessage());
                }

                @Override
                public void onCancel(Platform platform, int i) {
                    Logger.e("新浪登录：onCancel");
                }
            });
            platform.SSOSetting(false);
            platform.authorize();
        }

        /**
         * 注意：SsoHandler 仅当 SDK 支持 SSO 时有效
         */
//        private SsoHandler mSsoHandler;
        private int loginType;

//        /**
//         * 新浪微博登陆
//         */
//        public void clickBtnSinaLogin() {
//            loginType = 3;
//            /**
//             * REDIRECT_URL 注：关于授权回调页对移动客户端应用来说对用户是不可见的，所以定义为何种形式都将不影响，
//             * 但是没有定义将无法使用 SDK 认证登录。
//             * 建议使用默认回调页：https://api.weibo.com/oauth2/default.html
//             */
//
//            /**
//             * Scope 是 OAuth2.0 授权机制中 authorize 接口的一个参数。通过 Scope，平台将开放更多的微博
//             * 核心功能给开发者，同时也加强用户隐私保护，提升了用户体验，用户在新 OAuth2.0 授权页中有权利
//             * 选择赋予应用的功能。
//             * 我们通过新浪微博开放平台-->管理中心-->我的应用-->接口管理处，能看到我们目前已有哪些接口的
//             * 使用权限，高级权限需要进行申请。
//             * 目前 Scope 支持传入多个 Scope 权限，用逗号分隔。
//             * 有关哪些 OpenAPI 需要权限申请，请查看：http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI
//             * 关于 Scope 概念及注意事项，请查看：http://open.weibo.com/wiki/Scope
//             */
//            WbSdk.install(mActivity, new AuthInfo(mActivity, Constants.SINA_APPKEY, Constants.SINA_REDIRECT_URL, Constants.SINA_SCOPE));
//            mSsoHandler = new SsoHandler(mActivity);
//            mSsoHandler.authorize(new SelfWbAuthListener());
//        }


        public void onActivityResult(int requestCode, int resultCode, Intent data) {

            switch (loginType) {
                case 1:
                    //QQ登录回调
                    Tencent.onActivityResultData(requestCode, resultCode, data, new BaseUiListener());
                    if (requestCode == com.tencent.connect.common.Constants.REQUEST_API) {
                        if (resultCode == com.tencent.connect.common.Constants.REQUEST_LOGIN) {
                            Tencent.handleResultData(data, new BaseUiListener());
                        }
                    }
                    break;
                case 3:
//                    if (mSsoHandler != null) {
//                        //    Sina SSO 授权回调
//                        mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
//                    }
                    break;
            }
        }


        class BaseUiListener implements IUiListener {
            public void onComplete(Object response) {
                Logger.e("QQ登录回调:" + response.toString());
                loginToQQ(response.toString());

                /**
                 * 下面隐藏的是用户登录成功后 登录用户数据的获取的方法
                 * 共分为两种  一种是简单的信息的获取,另一种是通过UserInfo类获取用户较为详细的信息
                 *有需要看看
                 * */
//                try {
//                    //获得的数据是JSON格式的，获得你想获得的内容
//                    //如果你不知道你能获得什么，看一下下面的LOG
//                    Log.v("----TAG--", "-------------" + response.toString());
//                    openidString = ((JSONObject) response).getString("openid");
//                    mTencent.setOpenId(openidString);
//
//                    mTencent.setAccessToken(((JSONObject) response).getString("access_token"), ((JSONObject) response).getString("expires_in"));
//
//
//                    Log.v("TAG", "-------------" + openidString);
//                    //access_token= ((JSONObject) response).getString("access_token");              //expires_in = ((JSONObject) response).getString("expires_in");
//                } catch (JSONException e) {
//                    // TODO Auto-generated catch block
//                    e.printStackTrace();
//                }

                /**到此已经获得OpneID以及其他你想获得的内容了
                 QQ登录成功了，我们还想获取一些QQ的基本信息，比如昵称，头像什么的，这个时候怎么办？
                 sdk给我们提供了一个类UserInfo，这个类中封装了QQ用户的一些信息，我么可以通过这个类拿到这些信息
                 如何得到这个UserInfo类呢？  *//*

            QQToken qqToken = mTencent.getQQToken();
            UserInfo info = new UserInfo(getApplicationContext(), qqToken);

            //    info.getUserInfo(new BaseUIListener(this,"get_simple_userinfo"));
            info.getUserInfo(new IUiListener() {
                @Override
                public void onComplete(Object o) {
                    //用户信息获取到了

                    try {

                        Toast.makeText(getApplicationContext(), ((JSONObject) o).getString("nickname")+((JSONObject) o).getString("gender"), Toast.LENGTH_SHORT).show();
                        Log.v("UserInfo",o.toString());
                        Intent intent1 = new Intent(LoginActivity.this,MainActivity.class);
                        startActivity(intent1);
                        finish();
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }

                @Override
                public void onError(UiError uiError) {
                    Log.v("UserInfo","onError");
                }

                @Override
                public void onCancel() {
                    Log.v("UserInfo","onCancel");
                }
            });*/

            }

            @Override
            public void onError(UiError uiError) {
                onErrorAsync("QQ登录，onError");
            }

            @Override
            public void onCancel() {
                onErrorAsync("QQ登录，onCancel");
            }

        }

//        class SelfWbAuthListener implements com.sina.weibo.sdk.auth.WbAuthListener {
//            @Override
//            public void onSuccess(final Oauth2AccessToken token) {
//                Logger.e("新浪登录回调:" + JSON.toJSONString(token));
//                loginToSina(JSON.toJSONString(token));
//
////                WBAuthActivity.this.runOnUiThread(new Runnable() {
////                    @Override
////                    public void run() {
////                        mAccessToken = token;
////                        if (mAccessToken.isSessionValid()) {
////                            // 显示 Token
////                            updateTokenView(false);
////                            // 保存 Token 到 SharedPreferences
////                            AccessTokenKeeper.writeAccessToken(WBAuthActivity.this, mAccessToken);
////                            Toast.makeText(WBAuthActivity.this,
////                                    R.string.weibosdk_demo_toast_auth_success, Toast.LENGTH_SHORT).show();
////                        }
////                    }
////                });
//            }
//
//            @Override
//            public void onFailure(WbConnectErrorMessage errorMessage) {
//                onErrorAsync("新浪微博登录,onFailure:" + errorMessage.getErrorMessage());
//            }
//
//            @Override
//            public void cancel() {
//                onErrorAsync("新浪微博登录,cancel");
//            }
//
//        }

    }

}

